# 导入django的配置文件
from django.conf import settings
# 导入默认的配置文件
from .settings import DEFAULTS

# 从django配置文件中获取【CCSP_JWT】
USER_SETTINGS = getattr(settings, "CCSP_JWT", None)


class JWTSettings:
    def __init__(self, user_settings=USER_SETTINGS, *, defaults=None):
        '''
        初始化配置参数
        :param defaults:默认参数,支持用户手动传默认参数，但必须使用关键字传参
        :param user_settings: 用户定义在项目配置文件中的设置
        '''
        # 如果没有值则为空
        self.user_settings = user_settings or {}
        self.defaults = defaults or DEFAULTS  # 默认配置

    def __getattr__(self, attr):
        '''
        当使用点语法获取了一个不存在的属性时触发
        '''
        if attr not in self.defaults:
            # 如果配置项不是我锁指定的这些配置，抛出异常
            raise AttributeError("Invalid JWT setting: '%s'" % attr)
        try:
            # 从用户配置中查找
            val = self.user_settings[attr]
        except KeyError:
            # 如果用户配置中没有，就使用默认配置
            val = self.defaults[attr]
            # 如果都没有，在defaults[attr]时再次抛出keyError异常
        return val


# 实例化配置对象
jwt_settings = JWTSettings()
